<!DOCTYPE html>
<html lang="en">
    <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            
            
            
            <link rel="shortcut icon" href="../../../img/favicon.ico">
        
        <script type="text/javascript" src="//game.bmob.cn/static/doc_union.js"></script>
            <title>Bmob文档中心</title>
            <link href="../../../css/bootstrap-custom.min.css" rel="stylesheet">
            <link href="../../../css/font-awesome-4.5.0.css" rel="stylesheet">
            <link href="../../../css/base.css" rel="stylesheet">
            <link rel="stylesheet" href="../../../css/highlight.css">
            <link href="../../../css/agate.css" rel="stylesheet">
            <link href="../../../css/custom.css" rel="stylesheet" id="custom">
    </head>

    <body >

        <div class="navbar navbar-fixed-top" role="navigation">
    <div class="main-nav">
        <!-- Collapsed navigation -->
        <div class="navbar-header">
            <a class="navbar-brand" href="../../..">
                <!--Bmob文档中心-->
                <img src="../../../img/logo.png" alt="">
            </a>
        </div>

        <!-- Expanded navigation -->
        <div class="navbar-collapse collapse">

          <ul class="nav navbar-nav">
            
              <li class="pull-left">
                
					<a href="../../..">文档首页</a>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="">数据服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">数据服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
								<li >
									<a href="../../../data/android/">Android</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/ios/">iOS</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/csharp/">C#</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/php/">PHP</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/go/">GO</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/restful/">RESTful</a>
                                </li>
                            
                            
								<li >
									<a href="../../../data/javascript/">JavaScript</a>
                                </li>
                            
                            
                                <li >
                                    <a href="../../../data/cocos2d_x/">Cocos2D-X</a>
                                </li>
							
                            
								<li >
									<a href="../../../data/wechat_app/">小程序</a>
                                </li>
                            
                            
                                <li >
                                    <a href="../../../data/wechat_app_new/">快应用</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../data/wechat_app_new/">Nodejs</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../data/wechat_app_new/">Cocos Creator</a>
                                </li>
							
                            
								<li >
									<a href="../../../data/wechat_app_new/rm/">小程序(新)</a>
                                </li>
                            
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../cloud_function/android/">云函数</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">云函数 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../cloud_function/android/">Android</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/ios/">iOS</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/java/">Java</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/csharp/">C#</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/php/">PHP</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/javascript/">JavaScript</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../cloud_function/restful/">RESTful</a>
                                </li>
							
                            
								<li >
									<a href="../../../cloud_function/web/">Web</a>
                                </li>
                            
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../sms/android/">短信服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">短信服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../sms/android/">Android</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/ios/">iOS</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/php/">PHP</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/javascript/">JavaScript</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../sms/restful/">RESTful</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left active">
                
					<!--<a href="">游戏实时后端</a>-->
					<li class="dropdown active">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">游戏实时后端 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
								<li >
									<a href="../../unity/quick_start/">Unity</a>
                                </li>
                            
                            
								<li >
									<a href="../../cocos_creator/quick_start/">Cocos Creator</a>
                                </li>
                            
                            
								<li class="active">
									<a href="../quick_start/">微信小游戏</a>
                                </li>
                            
                            
                                <li >
                                    <a href="../../cloud_function/develop_doc/">云函数</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../classic_case/">经典案例</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="">IM服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">IM服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
								<li >
									<a href="../../../im/android/">Android</a>
                                </li>
                            
                            
								<li >
									<a href="../../../im/ios/">iOS</a>
                                </li>
                            
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../push/android/">推送服务</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">推送服务 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../push/android/">Android</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/ios/">iOS</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/php/">PHP</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/javascript/">JavaScript</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../push/restful/">RESTful</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li class="pull-left">
                
					<!--<a href="../../../other/common_problem/">其他</a>-->
					<li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">其他 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            
                                <li >
                                    <a href="../../../other/common_problem/">常见问题</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../other/error_code/">错误码</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../other/data_safety/">数据安全</a>
                                </li>
							
                            
                                <li >
                                    <a href="../../../other/bql/">BQL</a>
                                </li>
							
                        </ul>
                    </li>
                
              </li>
            
              <li>
                  <a href="https://www.bmob.cn/repository/index" target="_blank">知识库</a>
              </li>
              <li>
                  <a href="http://doc.bmob.cn/video/index.html" target="_blank">视频教程</a>
              </li>
            </ul>
            
        </div>
    </div>
</div>

        <div class="pagebody" id="main-wrapper">
            <div class="sidebar">
                <div class="bs-sidebar hidden-print affix well" role="complementary">

	
		
	
		
				
				
				
				
				
				
				
				
				
				
				
				
				
		
	
		
				
				
				
				
				
				
				
				
		
	
		
				
				
				
				
				
		
	
		
				
				
				
					<div class="code-title">微信小游戏</div>
				
				
				
		
	
		
				
				
		
	
		
				
				
				
				
				
		
	
		
				
				
				
				
		
	


	<ul class="nav bs-sidenav">
		
			
		
			
		
			
		
			
		
			
				
					
						
					
						
					
						
							
								
									<li class="">
										<a class="itm-l1" href="../quick_start/">快速入门</a>
										
									</li>
								
									<li class="active">
										<a class="itm-l1" href="./">开发文档</a>
										
										<ul class="nav">
											
											<li class="active "><a href="#sdk">引入SDK</a>
												
											</li>
												
											<li class=""><a href="#sdk_1">初始化SDK</a>
												
											</li>
												
											<li class=""><a href="#_1">注册房间动态监听器</a>
												
											</li>
												
											<li class=""><a href="#_2">注销房间动态监听器</a>
												
											</li>
												
											<li class=""><a href="#_3">创建房间</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#sdk_2">获得初始化sdk的第二个参数</a></li>
												</ul>
												
											</li>
												
											<li class=""><a href="#_4">销毁房间</a>
												
											</li>
												
											<li class=""><a href="#_5">加入房间</a>
												
											</li>
												
											<li class=""><a href="#_6">离开房间</a>
												
											</li>
												
											<li class=""><a href="#_7">准备</a>
												
											</li>
												
											<li class=""><a href="#_8">取消准备</a>
												
											</li>
												
											<li class=""><a href="#_9">房主踢人</a>
												
											</li>
												
											<li class=""><a href="#_10">发送游戏交互信息</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_11">同步角色状态</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_12">发送瞬时信息</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_13">通知云函数</a></li>
												</ul>
												
											</li>
												
											<li class=""><a href="#_14">注册游戏运行监听器</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_15">监听游戏内的行为</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_16">监听我的角色状态</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_17">监听角色状态</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_18">监听瞬时信息</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_19">监听云函数通知</a></li>
												</ul>
												
											</li>
												
											<li class=""><a href="#_20">注销游戏运行监听器</a>
												
											</li>
												
											<li class=""><a href="#_21">注册游戏掉线监听器</a>
												
											</li>
												
											<li class=""><a href="#_22">注销游戏掉线监听器</a>
												
											</li>
												
											<li class=""><a href="#_23">附录</a>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_24">房间逻辑流程图</a></li>
												</ul>
												
												<ul class="nav nav-l2">
													<li><a class="itm-l2" href="#_25">常量</a></li>
												</ul>
												
											</li>
												
										</ul>
										
									</li>
								
							
						
					
						
					
						
					
				
			
		
			
		
			
		
			
		
	</ul>
</div>
            </div>
            <div class="content" role="main">
                <div class="wrap">
                    

<h2 id="sdk">引入SDK<a class="headerlink" href="#sdk" title="Permanent link">&para;</a></h2>
<p>下载 <strong>微信小游戏SDK</strong>;
将 <strong>bmobgamesdk</strong> 文件夹 复制到项目中。</p>
<h2 id="sdk_1">初始化SDK<a class="headerlink" href="#sdk_1" title="Permanent link">&para;</a></h2>
<p>第一个参数修改为官网获取的 APPID (BGS游戏官网管理后台的游戏设置 &gt; 应用密钥)。
第二个参数可先不填，要在<strong>创建房间</strong>后获得。</p>
<pre><code>import BGS from '../../js/bmobgamesdk/bgsapi'; //根据你自己的存放路径更改
var BmobGame = BGS.instance;

BmobGame.Init('BGS APPID', 'ws://address:port', function (succ, msg) {
  if (succ) {
    // 用bmob小程序sdk进行注册登录
    // _getUser(listener);
  } else{
    // 提醒失败，并给重新init的按钮
  }
});
</code></pre>
<h2 id="_1">注册房间动态监听器<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>须在加入房间 JoinRoom <strong>之前</strong>注册，才能保证不遗漏房间信息。</p>
<pre><code>// action: 事件编号，见文档最下方常量的房间动态监听器 action 类型 
// no: 事件所属玩家编号
// data: 相关数据
onRoomAction(action, no, data) {
    // TODO 对事件做出相应处理
}

this.mRoomActListener = this.onRoomAction.bind(this);// 保存起来，注销时要用
BmobGame.RegistRoomActListener(this.mRoomActListener);
</code></pre>
<h2 id="_2">注销房间动态监听器<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<p>一般在房间场景销毁时注销房间动态监听器，在进入游戏场景时需要再重新注册此监听。</p>
<pre><code>BmobGame.UnregistRoomActListener (this.mRoomActListener);
</code></pre>
<h2 id="_3">创建房间<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h2>
<p>关于UserId，建议使用 <strong>Bmob小游戏sdk</strong> 的用户体系。
playerCount 为需要设定的房间人数。</p>
<pre><code>var userId =  Bmob.User.current().id;
BmobGame.CreateRoom(userId, playerCount, function(code, res) {
    if (code == 200) {
      console.log('对战开房成功', res);
      // TODO 创建房间成功，跳转游戏房间页面，别忘了把房间信息roomInfo保存起来
      // 返回结果res内容见下
    } else {
      console.log('对战开房失败 '+code +' &gt; ' , res);
    }
});
</code></pre>
<p>创建房间成功时，服务器会自动调用云函数 Room.java 的 <strong>onCreate</strong> 方法。</p>
<h3 id="sdk_2">获得初始化sdk的第二个参数<a class="headerlink" href="#sdk_2" title="Permanent link">&para;</a></h3>
<p>创建一个房间，输出这个操作的返回结果，返回结果为</p>
<pre><code>{
    "address": "a.b.c.d", // 服务器ip
    "roomInfo": {
        "ports": {
            "websocket": efgh // 服务器端口
        },
        "rid": xxx, // 房间id，JoinRoom时需要传入
        "joinKey": yyy // 房间密匙，JoinRoom时需要传入
        "masterKey" : aaa // 房间管理员密钥
    }
}
</code></pre>
<p>这样，你就获得了初始化sdk的第二个参数，是 <strong>ws://a.b.c.d:efgh</strong> 这样的格式   </p>
<p><strong>注意，在没有已备案域名之前，勾选微信开发者工具的<code>不检验域名</code>选项</strong></p>
<h2 id="_4">销毁房间<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<p>房间创建后不用时需要销毁，否则会占用服务器资源，会对其它正常游戏中的房间造成一定的影响。</p>
<p>不推荐从客户端SDK调用此接口销毁房间，而是在云函数判断情况来销毁房间，例如《吃鸡》战斗结束一分钟后房间会自动销毁，以避免客户端异常状况导致房间资源未被释放。</p>
<p><em>以下是客户端调用销毁房间方法</em></p>
<pre><code>// code: 200为成功，否则失败，详见&lt;错误码&gt;
// msg : 详情
function CallBack(code, msg){
    // TODO UI反馈
}
BmobGame.DestroyRoom(int roomId, String MasterKey, CallBack.bind(this));
</code></pre>
<p>销毁房间成功时，会自动调用云函数 Room.java 的 <strong>onDestroy</strong> 方法。</p>
<p><em>云函数销毁房间，请参考云函数文档</em></p>
<h2 id="_5">加入房间<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h2>
<pre><code>// 这里的 roomInfo 就是创建房间时让你保存的 roomInfo
BmobGame.JoinRoom(that.roomInfo.rid, that.roomInfo.joinKey, userId, BmobGame.get('seatKey'), function(code, data) {
  if (code == 200) {
    common.toast('加入房间成功');
    console.log("房间信息:", data);

    let
      playerCount = data.playerCount, // 玩家数
      no = data.no, // 玩家编号
      isPlaying = data.isPlaying, //是否在游戏中
      masterId = data.master, //房主userId
      players = data.players;// 房间全部玩家信息
        // 每一个玩家信息包括： 玩家编号：no；玩家id：userId；玩家状态：status，见文档最下方常量的玩家状态类型

    if (data.seatKey)
      BmobGame.set('seatKey', data.seatKey);// 记录玩家座位号
    // TODO 根据返回的房间信息做些保存或处理

    return;
  }
  console.log('加入房间失败 '+code + ' &gt; ', data);
}.bind(this));
</code></pre>
<p>加入房间成功时，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong> 收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onJoin</strong> 方法。</p>
<h2 id="_6">离开房间<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.QuitRoom();
</code></pre>
<p>离开房间成功时，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong> 收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onLeave</strong> 方法。</p>
<h2 id="_7">准备<a class="headerlink" href="#_7" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.ReadyAtRoom ();
</code></pre>
<p>成功提交准备后，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onReady</strong> 方法。
当房间人满且全部人员都准备后，服务器会自动开始游戏（想主动开始，可调用云函数的 room.dispatchGameStart() 方法）。此时所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，云函数 Player.java 的 <strong>onGameStart</strong>会被调用。</p>
<h2 id="_8">取消准备<a class="headerlink" href="#_8" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.UnReadyAtRoom ();
</code></pre>
<p>成功提交取消准备后，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onUnready</strong> 方法。</p>
<h2 id="_9">房主踢人<a class="headerlink" href="#_9" title="Permanent link">&para;</a></h2>
<p>建议不调用此接口，而是用通知云函数的方式踢出玩家，这样做的好处是可以在踢出时做一些工作，例如重置被踢玩家的属性。</p>
<pre><code>// code: 200为成功，否则失败，详见&lt;错误码&gt;
// msg : 详情
void CallBack(int code, string msg){
    // TODO UI反馈
}

// masterKey : 房间管理员密钥
// no: 被踢玩家编号
BmobGame.KickPlayer (string masterKey,int no, CallBack.bind(this));
</code></pre>
<p>成功踢出该玩家后，所有玩家会在房间动态监听器 <strong>RoomActionListener</strong>收到该事件通知，服务器会自动调用云函数 Player.java 的 <strong>onKicked</strong> 方法。</p>
<hr />
<h2 id="_10">发送游戏交互信息<a class="headerlink" href="#_10" title="Permanent link">&para;</a></h2>
<h3 id="_11">同步角色状态<a class="headerlink" href="#_11" title="Permanent link">&para;</a></h3>
<p>将处理事件转发的脚本绑定给本地角色Player，例如将Player的移动、旋转等数据，调用SDK接口同步到服务器。
通过 <strong>BmobGame.OthersGameStatusListener</strong> 能监听到所有玩家的状态。</p>
<pre><code>// attrName： 配置在游戏管理后台的玩家属性名
// value： 状态值，类型可以是boolean、int、float、double、boolean[]、int[]、float[]、double[]
BmobGame.EditMyStatus(string attrName, object value);
</code></pre>
<h3 id="_12">发送瞬时信息<a class="headerlink" href="#_12" title="Permanent link">&para;</a></h3>
<p>这是玩家之间交互数据，通过 <strong>BmobGame.TransferListener</strong> 能收到其他玩家发送的数据。
 信息为<strong>byte数组</strong>形式，建议把数组的第一位作为自定义的交互事件类型flag，后面的为要交互的数据。</p>
<pre><code>BmobGame.SendTransferToAllExceptSelf(byte[] data);
</code></pre>
<p>sdk特别提供了把string和byte数组互转的方法</p>
<pre><code>BmobGame.stringToBytes('stringXXX'); // string转byte[]
BmobGame.bytesToString(data, 0, data.length); // byte[]转string
</code></pre>
<h3 id="_13">通知云函数<a class="headerlink" href="#_13" title="Permanent link">&para;</a></h3>
<p>调用云函数代码，action 为云函数中的方法名，content 为传入该云函数方法的参数，byte[]类型。
例如action传入A，则对应云函数 Play.java 中的 onAction_A 方法。</p>
<pre><code>BmobGame.CloudAction(string action, byte[] content);
</code></pre>
<hr />
<h2 id="_14">注册游戏运行监听器<a class="headerlink" href="#_14" title="Permanent link">&para;</a></h2>
<pre><code>BmobGame.SetGameRuntimeListeners (
    this.onGameInfo.bind(this), // 监听的是在游戏内的行为
    this.onMyStatus.bind(this), // 监听我的角色状态
    this.onOthersStatus.bind(this), //监听角色状态
    this.onTransfer.bind(this), //监听瞬时信息
    this.onCloudNotify.bind(this) //监听云函数通知
);
</code></pre>
<p>批量注册游戏运行监听器，具体每个监听器方法见下方。</p>
<h3 id="_15">监听游戏内的行为<a class="headerlink" href="#_15" title="Permanent link">&para;</a></h3>
<p>返回的是在游戏内的行为，例如掉线、战斗开始、战斗结束等（使用频率较低）</p>
<pre><code>// action：行为类型，见文档最下方常量的游戏内的 action 类型
// fromNo：信息所属玩家的编号
// data：类型为 PlayerGameAction_Reconn 时，data传入 startTime 和 playerCount
onGameInfo(action, no, data) {
    console.log('OnGameInfo:', arguments);
}
</code></pre>
<h3 id="_16">监听我的角色状态<a class="headerlink" href="#_16" title="Permanent link">&para;</a></h3>
<p>读取服务器同步的数据，例如可通知我的分数。</p>
<pre><code>// changedAttr： json类型，我变化的属性值列表
// status： 状态值
onMyStatus(changedAttr, myStatus) {
    console.log('onMyStatus:', arguments);
    if (changedAttr.score) {
        let score ＝myStatus.score ;
    }
}
</code></pre>
<h3 id="_17">监听角色状态<a class="headerlink" href="#_17" title="Permanent link">&para;</a></h3>
<p>读取服务器同步的数据，例如可渲染其它玩家的位置。</p>
<pre><code>// fromNo：信息所属玩家的编号
// changedAttr： json类型，更改的属性值列表
// status： 状态值
onOthersStatus(fromNo, changedAttr, hisStatus) {
    console.log('On other status:', arguments);
    if (changedAttr.position) {
        let x = hisStatus.position[0],
            y = hisStatus.position[1];
    }
}
</code></pre>
<h3 id="_18">监听瞬时信息<a class="headerlink" href="#_18" title="Permanent link">&para;</a></h3>
<p>获取其它玩家发送的瞬时信息，作出相应处理。</p>
<pre><code>// fromNo：信息所属玩家的编号
// data：发送过来的数据，一般定第一位为flag
onTransfer(fromNo, data) {
    let flag = data.shift();// 发送时把第一位作为了flag
    Debug.Log ("Get transfer data flag = " + flag + " &amp; len = " + data.Length + " &amp; from: " + no);
    // TODO 根据flag做出相应处理
}
</code></pre>
<h3 id="_19">监听云函数通知<a class="headerlink" href="#_19" title="Permanent link">&para;</a></h3>
<pre><code>//对收到云函数通知的处理,notify为byte[]
void onCloudNotify(notify){
    console.log('onCloudNotify: ' + notify[0]);
    switch (notify.shift()) {
        case 1:
            // TODO 对相应flag做出相应处理
            console.log(Bgs.bytesToString(notify, 0, notify.length));
            break;
    }
}
</code></pre>
<p>顺便一提，仅当云函数调用以下方法时，客户端才会通过 BmobGame.CloudNotifyListener 收到通知。</p>
<pre><code>player.send
player.sendToAll
player.sendToOthers

room.sendToAll
room.sendToAllExcept(content, player)
</code></pre>
<h2 id="_20">注销游戏运行监听器<a class="headerlink" href="#_20" title="Permanent link">&para;</a></h2>
<p>一般在游戏场景销毁时，注销游戏运行监听器。</p>
<pre><code>BmobGame.StopGameRuntimeListener ();
</code></pre>
<hr />
<h2 id="_21">注册游戏掉线监听器<a class="headerlink" href="#_21" title="Permanent link">&para;</a></h2>
<pre><code>void onOffline ()
{
    // TODO 进行掉线通知及处理
}
this.mOfflineListener = this.onOffline.bind(this);// 保存起来，注销时要用
BmobGame.RegistOfflineListener (this.mOfflineListener);
</code></pre>
<h2 id="_22">注销游戏掉线监听器<a class="headerlink" href="#_22" title="Permanent link">&para;</a></h2>
<p>一般在游戏场景销毁时，注销游戏掉线监听器。</p>
<pre><code>BmobGame.UnregistOfflineListener (this.mOfflineListener); // 注销游戏掉线监听
</code></pre>
<hr />
<h2 id="_23">附录<a class="headerlink" href="#_23" title="Permanent link">&para;</a></h2>
<h3 id="_24">房间逻辑流程图<a class="headerlink" href="#_24" title="Permanent link">&para;</a></h3>
<p><img alt="此处输入图片的描述" src="http://bmob-cdn-15075.b0.upaiyun.com/2018/05/21/2812fc16409b2ab18070b26e228a91d2.png" /></p>
<h3 id="_25">常量<a class="headerlink" href="#_25" title="Permanent link">&para;</a></h3>
<h4 id="action">房间动态监听器 action 类型<a class="headerlink" href="#action" title="Permanent link">&para;</a></h4>
<table>
<thead>
<tr>
<th align="center">名称</th>
<th align="center">含义</th>
<th align="center">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">PlayerRoomAction_Join</td>
<td align="center">玩家加入</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Leave</td>
<td align="center">玩家离开</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Offline</td>
<td align="center">玩家掉线</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Reconn</td>
<td align="center">玩家重连</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Ready</td>
<td align="center">玩家准备</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Unready</td>
<td align="center">玩家取消准备</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_Kicked</td>
<td align="center">玩家被踢出</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">PlayerRoomAction_GameOver</td>
<td align="center">游戏结束，云函数调用room.dispatchGameOver()时</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">RoomAction_Start</td>
<td align="center">房间满人且全部已准备时</td>
<td align="center">data传入当前时间，单位毫秒：data ["nowTime"]</td>
</tr>
</tbody>
</table>
<h4 id="_26">玩家状态类型<a class="headerlink" href="#_26" title="Permanent link">&para;</a></h4>
<table>
<thead>
<tr>
<th align="center">名称</th>
<th align="center">含义</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">PlayerStatus_NoBody</td>
<td align="center">该位置上尚无玩家</td>
</tr>
<tr>
<td align="center">PlayerStatus_Waitting</td>
<td align="center">该位置上有玩家，在等待中，尚未准备</td>
</tr>
<tr>
<td align="center">PlayerStatus_Ready</td>
<td align="center">该位置上有玩家，已经准备了</td>
</tr>
<tr>
<td align="center">PlayerStatus_Playing</td>
<td align="center">该位置上有玩家，已经在游戏中</td>
</tr>
<tr>
<td align="center">PlayerStatus_GameOut</td>
<td align="center">该位置上有玩家，已经在游戏中被淘汰</td>
</tr>
<tr>
<td align="center">PlayerStatus_Offline</td>
<td align="center">该位置上有玩家，已经在游戏中，但是掉线了</td>
</tr>
</tbody>
</table>
<h4 id="action_1">游戏内的 action 类型<a class="headerlink" href="#action_1" title="Permanent link">&para;</a></h4>
<table>
<thead>
<tr>
<th align="center">名称</th>
<th align="center">含义</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">PlayerGameAction_Offline</td>
<td align="center">玩家游戏中掉线</td>
</tr>
<tr>
<td align="center">PlayerGameAction_Reconn</td>
<td align="center">玩家游戏中重连</td>
</tr>
<tr>
<td align="center">PlayerGameAction_GameLose</td>
<td align="center">玩家失败</td>
</tr>
</tbody>
</table>
                </div>
            </div>
        </div>

        
            <script>var base_url = '../../..';</script>
            <script src="../../../js/jquery-1.10.2.min.js"></script>
            <script src="../../../js/bootstrap-3.0.3.min.js"></script>
            <script src="../../../js/highlight.pack.js"></script>
            <script src="../../../js/main.js"></script>
            <script src="../../../js/base.js"></script>

        <div id="go-top"><i class="fa fa-chevron-up"></i></div>
        <a href="https://docs.bmob.cn/data/Android/a_faststart/doc/index.html" id="back" target="_blank">返回 <br> 旧版</a>
    </body>

</html>